#include "CTimer.h"

CTimer::CTimer()
{
	///////////////////////////////////////////////////////////////////////////////
	//	Getting how fast the processor is going, how many times it runs per second
	LONGLONG tickspersecond = 0;
	QueryPerformanceFrequency((LARGE_INTEGER*)&tickspersecond);
	m_dTimeScale = 1.0 / (double)tickspersecond;
	m_llstartTimeStamp = 0;
	m_bIsTiming = false;
	m_dTotalElapsedTime = 0.0;
	//
	///////////////////////////////////////////////////////////////////////////////
}
CTimer::~CTimer()
{

}
void CTimer::Start()
{
	///////////////////////////////////////////////////////////////////////////////
	//	Starting time stamp and setting timing to true
	if(!m_bIsTiming)
	{
		QueryPerformanceCounter((LARGE_INTEGER*)&m_llstartTimeStamp);
		m_bIsTiming = true;
	}
	//
	///////////////////////////////////////////////////////////////////////////////
}
void CTimer::Stop()
{
	m_dTotalElapsedTime = GetTime();
	m_bIsTiming = false;
}
void CTimer::Reset()
{
	///////////////////////////////////////////////////////////////////////////////
	//	Reset the startTimeStamp and the total elapsed time
	QueryPerformanceCounter((LARGE_INTEGER*)&m_llstartTimeStamp);
	m_dTotalElapsedTime = 0.0;
	//
	///////////////////////////////////////////////////////////////////////////////
}

double CTimer::GetTime()
{
	///////////////////////////////////////////////////////////////////////////////
	// If it is timing, we want to calculate the elapsed time
	double dElapsedTime = 0.0;
	if(m_bIsTiming)
	{
		LONGLONG llcurrentTimeStamp = 0;
		QueryPerformanceCounter((LARGE_INTEGER*)&llcurrentTimeStamp);
		dElapsedTime = ((double)llcurrentTimeStamp - (double)m_llstartTimeStamp) * m_dTimeScale;
		dElapsedTime += m_dTotalElapsedTime;

	}
	else
		dElapsedTime = m_dTotalElapsedTime;
	//
	///////////////////////////////////////////////////////////////////////////////
	return dElapsedTime;
}